<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>非单文件组件</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 
			Vue中使用组件的三大步骤：
				一、定义组件(创建组件)
				二、注册组件
				三、使用组件(写组件标签)

			一、如何定义一个组件？
				使用Vue.extend(options)创建，其中options和new Vue(options)时传入的那个options几乎一样，但也有点区别；
				区别如下：
						1.el不要写，因为最终所有的组件都要经过一个vm的管理，由vm中的el决定服务哪个容器。
						2.data必须写成函数，因为避免组件被复用时，数据存在引用关系。
				备注：使用template可以配置组件结构。

			二、如何注册组件？
				1.局部注册：靠new Vue的时候传入components选项
				2.全局注册：靠Vue.component('组件名',组件)

			三、编写组件标签：
				<school></school>
		-->
		<!-- 准备好一个容器-->
		<div id="root">
			<!-- 第三步：编写组件标签 -->
			<school></school>
			<hr>
			<!-- 第三步：编写组件标签 -->
			<student></student>
		</div>
	</body>
	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
		// 第一步：xuexiao创建组件
		const xuexiao = Vue.extend({
			// el: '#root', 组件定义时，一定不要写el配置项。
			template: `
				<div>
					<h2>学校名称：{{schoolName}}</h2>
					<h2>学校地址：{{address}}</h2>
					<button @click="showInfo()">弹窗学校信息</button>
				</div>
			`,
			data(){
				return {schoolName: "广技师",address: "广州天河区"}
			},
			methods: {
				showInfo(){
					alert(this.schoolName)
				}
			},
		})
		// 第一步：xuesheng创建组件
		const student = Vue.extend({
			template: `
				<div>
					<h2>学生名字：{{studentName}}</h2>
					<h2>学校年龄：{{age}}</h2>
				</div>
			`,
			data(){
				return {studentName: "张三",age: 22}
			}
		})
		// hello组件
		const hello = Vue.extend({
			template: `
				<div>
					<h2>Hello, {{name}}</h2>
				</div>
			`,
			data(){return {name: "Tom"}}
		})
		// 第二步：注册全局组件
		Vue.component('hello',hello)
		// 创建Vue实例
		new Vue({
			el: "#root",
			components:{
				// 第二步：注册组件（局部注册）
				school:xuexiao,
				// student:student
				student // 名字相同时可简写为这种形式
			}
		})
	</script>
</html>